'''
Created on 29/09/2013

@author: daniel
'''
import unittest
import ejercicio2.arbolAVL

class MonasDeLuchu(ejercicio2.arbolAVL.ArbolAVL):
    '''
    clase que implementa la solucion del arbol de alturas de monas de luchu
    '''
    def menorDeLasMayores(self):
        if(self.getR()!=None):return self.getR().__getMinimo__().getObjeto()
        else: self.getObjeto()
        
    
    def mayorDeLasMenores(self):
        if(self.getL()!=None):return self.getL().__getMaximo__().getObjeto()
        else: self.getObjeto()
    
    def __getMinimo__(self):
        '''
        devuelve la hoja con el minimo valor del arbol
        '''
        if(self.getL()!=None):return self.getL().__getMinimo__()
        return self
    
    def __getMaximo__(self):
        '''
        devuelve la hoja con el maximo valor del arbol
        '''
        if(self.getR()!=None):return self.getR().__getMaximo__()
        return self


class Test(unittest.TestCase):


    def testInit(self):
        obj=MonasDeLuchu(150)
        self.assertIsInstance(obj, MonasDeLuchu, "Verifica correctga creacion de arbol de luchu")
        
    def testMenorDeLasMayores(self):
        '''
        en obj se arma el siguiente ArbolAVL:
            120
            /  \
        112     137
        /\      / \
      95 115  125 150
       \   \
       107 118      Luego se evalua la devolucion de la funcion menorDeLasMayores()
        '''
        obj=MonasDeLuchu(120)
        obj.agregar(112)
        obj.agregar(137)
        obj.agregar(95)
        obj.agregar(115)
        obj.agregar(125)
        obj.agregar(150)
        obj.agregar(107)
        obj.agregar(118)
        self.assertEquals(obj.menorDeLasMayores(), 125, "Verifica el valor devuelto por la funcion")
        

    def testMayorDeLasMenores(self):
        '''
        en obj se arma el siguiente ArbolAVL:
            120
            /  \
        112     137
        /\      / \
      95 115  125 150
       \   \
       107 118      Luego se evalua la devolucion de la funcion mayorDeLasMenores()
        '''
        obj=MonasDeLuchu(120)
        obj.agregar(112)
        obj.agregar(137)
        obj.agregar(95)
        obj.agregar(115)
        obj.agregar(125)
        obj.agregar(150)
        obj.agregar(107)
#        obj.agregar(117)
        obj.agregar(118)
        self.assertEquals(obj.mayorDeLasMenores(), 118, "Verifica el valor devuelto por la funcion")


if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()